#ifndef __LCD1602_H
#define __LCD1602_H

#include "reg52.h"
#include "type.h"
#include "gpio.h"
#include "intrins.h"
#include "uart.h"

/***********************************************************************************************************************
LCD1602���Ŷ���
***********************************************************************************************************************/
#define LCD1602_EN 7
#define LCD1602_RW 5
#define LCD1602_RS 6
#define LCD1602_ODR P2
#define LCD1602_DATA_ODR P0
#define SET_LCD1602_EN()         do{SET_Bit(LCD1602_ODR, LCD1602_EN);}while(0)
#define CLR_LCD1602_EN()         do{CLR_Bit(LCD1602_ODR, LCD1602_EN);}while(0)
#define SET_LCD1602_DATA_MODE()  do{SET_Bit(LCD1602_ODR, LCD1602_RS);}while(0)
#define SET_LCD1602_COMD_MODE()  do{CLR_Bit(LCD1602_ODR, LCD1602_RS);}while(0)
#define SET_LCD1602_WRITE()      do{CLR_Bit(LCD1602_ODR, LCD1602_RW);}while(0)
#define SET_LCD1602_READ()       do{SET_Bit(LCD1602_ODR, LCD1602_RW);}while(0)

/***********************************************************************************************************************
LCD1602����״̬
***********************************************************************************************************************/
#define LCD1602_CMD           0                                         
#define LCD1602_DATA          1

#define LCD1602_NONE          0
#define LCD1602_WELCOME       1
/***********************************************************************************************************************
LCD1602����  
***********************************************************************************************************************/
#define  NO_CURSOR            0
#define  CURSOR_NOT_BLINGKING 2
#define  CURSOR_BLINGKING     3
/***********************************************************************************************************************
LCD1602״̬����
***********************************************************************************************************************/
typedef struct _LCD1602_T
{
        INT8U delay_ms;
    
}LCD1602_T;
/***********************************************************************************************************************
LCD1602�����ӿ�
***********************************************************************************************************************/
extern void lcd1602_init(void);
extern void lcd1602_write(INT8U* _data, INT16U _length, INT8U _flag);
extern void lcd1602_write_cgram(INT8U _cgram_address, INT8U *_code_pointer);
extern void lcd1602_setCursorPos(INT8U _line, INT8U _row, INT8U _state);
#endif